#include "MprpcConfig.h"

#include <iostream>

void MprpcConfig::LoadConfig(const char *config)
{
    FILE *pf = fopen(config, "r");
    if (pf == nullptr)
    {
        std::cout << "config not exist" << std::endl;
        exit(EXIT_FAILURE);
    }

    while (!feof(pf))
    {
        char buf[512];
        fgets(buf, sizeof buf, pf);

        // 空格 注释 配置项 \n 混杂在一起
        //    rpcServerIp    = 127.0.0.1     \n
        std::string str(buf);
        // 1.去除 \n
        int enterIndex=str.find('\n');
        if(enterIndex!=str.npos)
        {
            str=str.substr(0,enterIndex);
        }
        // 2. 去除整个字符串的前后空格
        Trim(str);
        if (str[1] == '#' || str.empty())
            continue;

        int index = str.find("=");
        std::string key = str.substr(0, index);
        // 3. 去除key的前后空格
        Trim(key);
        std::string value = str.substr(index + 1);
        // 4. 去除value的前后空格
        Trim(value);
        m_configMap.insert(make_pair(key, value));
    }
}

std::string MprpcConfig::Load(const std::string &key)
{
    if (m_configMap.find(key) == m_configMap.end())
        return "";
    return m_configMap[key];
}

// 去除字符串前后的空格
void MprpcConfig::Trim(std::string &str)
{
    int index = str.find_first_not_of(" ");
    if (index != std::string::npos)
    {
        // 说明这一行不是空行，有内容
        str = str.substr(index);
    }
    index = str.find_last_not_of(" ");
    if (index != std::string::npos)
    {
        str = str.substr(0, index + 1); // 去除后面的空格
    }
}

